{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "f541a123",
   "metadata": {},
   "source": [
    "# FIR滤波器结构：第Ⅰ类线性相位型\n",
    "\n",
    "画出单位脉冲响应为 h(n)=1,-0.5,1.5,1,2,1,1.5,-0.5,1 的第I型线性相位滤波器的幅度函数和相位函数。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "370fdba5",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "#library\n",
    "import numpy as np;from math import *\n",
    "import matplotlib.pyplot as plt;from matplotlib import ticker\n",
    "\n",
    "#单位脉冲响应\n",
    "h = np.array([1,-0.5,1.5,1,2,1,1.5,-0.5,1]) #N为奇数，偶对称\n",
    "N = len(h);L = int((N-1)/2)\n",
    "\n",
    "#幅度函数和相位函数\n",
    "a = np.append(h[L],2*h[L-1::-1]) #a(n)各值\n",
    "n = np.arange(L+1);w = np.arange(501)*2*pi/500\n",
    "a = a.reshape(-1,1);w = w.reshape(-1,1) #将a(n)和w(n)转为一列\n",
    "Hw = np.dot(np.cos(w*n),a);Pw = w*(-L) ##幅度函数和相位函数\n",
    "\n",
    "#绘制单位响应\n",
    "fig,ax = plt.subplots();ax.stem(h,basefmt=\"\")\n",
    "ax.set_title('第I类线性相位的h（n)');ax.set_xlabel('n')\n",
    "plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签\n",
    "plt.rcParams['axes.unicode_minus'] = False #用来显示负号\n",
    "fig.savefig('./fir_linear_phase1_1.png',dpi=500)\n",
    "\n",
    "#绘制幅度函数和相位函数\n",
    "fig,axs = plt.subplots(2,1,constrained_layout=True)\n",
    "axs[0].plot(w/pi,Hw);axs[1].plot(w/pi,Pw/pi)\n",
    "axs[0].set_title('第I类线性相位的幅度函数');axs[0].grid()\n",
    "axs[0].set_xlabel('frequency');axs[0].set_ylabel(r'$ H( \\omega )$')\n",
    "formatter = ticker.FormatStrFormatter('%1.2f$ \\pi$')\n",
    "axs[0].xaxis.set_major_formatter(formatter)\n",
    "axs[1].set_title('第I类线性相位的相位函数');axs[1].grid()\n",
    "axs[1].set_xlabel('frequency');axs[1].set_ylabel(r'$ \\theta ( \\omega )$')\n",
    "axs[1].xaxis.set_major_formatter(formatter)\n",
    "axs[1].yaxis.set_major_formatter(formatter)\n",
    "plt.show();fig.savefig('./fir_linear_phase1_2.png',dpi=500)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "8c727e02",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.8"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
